#!usr/bin/python
# -*- coding:utf-8 -*-
print("对会议和主题报告数据表进行合并操作.")

'''
2019年会议和对应主题报告分为两个Excel表,使用mongoengine较难处理.
考虑到每年会议数据更新较少,下述将两个表合并.
该操作同增加chinname字段等类似.区别在于set对象为一个包含字段的列表而非字符串.
另外,还需要对主题报告和会议名称进行处理,因为其名称不一致.
'''

import xlrd
import pymongo
import pandas as pd
import re

theme=pd.read_excel("C:\\Users\\Administrator\\Desktop\\subjects.xlsx",encoding='gbk')
columns=['会议','主题报告','演讲者','机构','关键词']
themes=pd.DataFrame(theme,columns=columns)
# print(themes.head())

connection=pymongo.MongoClient('mongodb://192.168.1.123:27017')
db=connection.test
collection=db.conference
print('数据库连接成功')

# iterrows遍历dataframe的每一行.
# for index,row in themes.iterrows():
#     print(row['会议'],row['主题报告'])

# 不同会议构建不同的列表,列表元素为字典
conference=themes['会议'].unique()
conf=list(conference)
# 转化为列表
print(conf)
the={}

'''增加会议名称在主题报告表中的对应id，使用LazyField查询一个会议对应的主题报告详细情况.'''
# for i in conference:
#     the[i]=[]
#     for index,row in themes.iterrows():
#         if row['会议']==i:
#             the[i].append({'tid':row['_id']})
# print(the)
#
#
# for i in the:
#     # 注意到主题报告中字段不完全性,使用模糊查询,会议名称只要包含主题报告就find结果.
#     # cursor=collection.find({"会议名称":i})
#     cursor=collection.find({"会议名称":re.compile(i)})
#     if cursor is not None:
#         for document in cursor:
#             db.conference.update_one({'_id':document['_id']},{'$set':{'主题报告':the[i]}})

for i in conference:
    the[i]=[]
    for index,row in themes.iterrows():
        if row['会议']==i:
            the[i].append({'主题报告':row['主题报告'],'演讲者':row['演讲者'],'机构':row['机构'],'关键词':row['关键词']})
print(the)

for i in the:
    # 注意到主题报告中字段不完全性,使用模糊查询,会议名称只要包含主题报告就find结果.
    # cursor=collection.find({"会议名称":i})
    cursor=collection.find({"会议名称":re.compile(i)})
    if cursor is not None:
        for document in cursor:
            db.meetings.update_one({'_id':document['_id']},{'$set':{'主题':the[i]}})


# 仅仅保存了每个会议的最后一个数据
# for index,row in themes.iterrows():
#     # 中文--直接匹配,不需要考虑大小写和正序、逆序等问题
#     cursor=collection.find({"会议名称":row['会议']})
#     if cursor is not None:
#         for document in cursor:
#             db.meetings.update_one({'_id':document['_id']},{'$set':{'主题':[{'主题报告':row['主题报告'],'演讲者':row['演讲者'],'机构':row['机构'],'关键词':row['关键词']}]}})


